package com.vdong.trade.trading.service;

import com.github.pagehelper.PageInfo;
import com.vdong.trade.trading.entity.dto.*;
import com.vdong.trade.trading.entity.dto.param.WithdrawDTO;
import com.vdong.trade.trading.entity.dto.result.MoneyAndCountResultDTO;
import com.vdong.trade.trading.entity.po.SettlementTotalParamDTO;
import com.vdong.trade.trading.entity.po.WithdrawParamDTO;
import com.vdong.trade.trading.entity.mo.*;
import com.vdong.trade.trading.entity.vo.WithdrawConfigVO;
import org.lamb.framework.common.remote.FacadeResult;


/**
 * @author zhoulongbiao
 * @Date 2018/12/10 14:41
 */
public interface WithdrawService {

    /**
     * 提现记录
     *
     * @param param
     * @return
     */
    PageInfo<WithdrawRecordListDTO> withdrawRecordList(WithdrawParamDTO param);

    /**
     * 提现记录详情
     *
     * @param param
     * @return
     */
    WithdrawDetailDTO withdrawDetail(WithdrawParamDTO param);

    /**
     * 提现申请列表
     *
     * @param param
     * @return
     */
    PageInfo<WithdrawApplyListDTO> withdrawApplyList(WithdrawParamDTO param);

    /**
     * 提现申请详情
     *
     * @param param
     * @return
     */
    WithdrawApplyDetailDTO withdrawApplyDetail(WithdrawParamDTO param);

    /**
     * 转账申请列表
     *
     * @param param
     * @return
     */
    PageInfo<TransferApplyListDTO> transferApplyList(SettlementTotalParamDTO param);

    /**
     * 确认/拒绝转账申请
     *
     * @param param
     * @return
     */
    TransferConfirmOrRefuseMO transferConfirmOrRefuse(SettlementTotalParamDTO param);

    /**
     * 转账记录列表
     *
     * @param param
     * @return
     */
    PageInfo<TransferRecordListDTO> transferRecordList(SettlementTotalParamDTO param);

    /**
     * 转账记录详情
     *
     * @param param
     * @return
     */
    TransferRecordDetailDTO transferRecordDetail(SettlementTotalParamDTO param);

    /**
     * 推客提现
     *
     * @param withdrawDTO
     * @return
     */
    FacadeResult<String> userWithdraw(WithdrawDTO withdrawDTO);

    /**
     * 商户提现
     *
     * @param withdrawDTO
     * @return
     */
    FacadeResult<String> merchantWithdraw(WithdrawDTO withdrawDTO);

    /**
     * 商户提现审核
     *
     * @param withdrawDTO
     * @return
     */
    FacadeResult<String> withdrawAudit(WithdrawDTO withdrawDTO);

    /**
     * 转账申请金额和申请笔数
     *
     * @param param
     * @return
     */
    MoneyAndCountResultDTO moneyAndCount(SettlementTotalParamDTO param);

    /**
     * 用户提现配置
     *
     * @param withdrawDTO
     * @return
     */
    WithdrawConfigVO withdrawConfig(WithdrawDTO withdrawDTO);

}
